/*********************************************************
 * 初学之家(http://www.g2room.com)，提供Java、Javascript（js）、Jquery、
 * 等一些工具或常用功能的实现例子代码，希望能给初学者提供学习和工作上的帮助，
 * 也希望有想提供源代码的朋友能联系我，一起努力，提供更多、更全面、更详细的
 * 一些初学代码例子及经验，帮助更多的人。
 * 
 * 我的联系方式：E-Mail：g2room@163.com
 * 网址：http://www.g2room.com
 * QQ：天涯（1173930590）
 * QQ交流群：323642758
 * 
 * 本站内容为提供各种java、javascript(JS)常用的工具源代码、实例（示例）、
 * 基本配置、教程、手册等；目前Java代码提供的工具（或转换）例子代码如下：
 * BASE64转换工具、bytes相关操作、email收发、文件操作（读写、拷贝、遍历、
 * 多线程copy等）、json格式转换、日志（Log4j）操作工具、Lucene搜索引擎的
 * 创建索引和搜索、各种不同Map的使用、定时器（Quartz）的使用例子、Socket的
 * 连接传输数据例子、WebService的例子及一些常用的工具类如String、Date及
 * JDK自带的一些工具类及函数的使用例子。
 * 
 * 说明：如需直接使用本站的例子代码，请保留此说明
 * 
 ********************************************************/
package com.itttq.kb.utils;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import org.apache.commons.lang3.StringUtils;

import sun.misc.BASE64Encoder;

/**
 * 加密工具类，由于已有Base64Util，此处只做MD5和SHA的加密
 *
 * @createTime: Jun 19, 2013 12:20:11 PM
 * @author: <a href="mailto:g2room@163.com">天涯</a>
 * @version: 0.1
 * @lastVersion: 0.1
 * @updateTime: 
 * @updateAuthor: <a href="mailto:g2room@163.com">天涯</a>
 * @changesSum: 
 * 
 */
@SuppressWarnings("restriction")
public class EncryptUtil {
	/**
     * 用MD5算法进行加密 
     * @param {String} str 需要加密的字符串 
     * @return {String} MD5加密后的结果 
	 * @throws NoSuchAlgorithmException 
	 *
	 * @auther <a href="mailto:g2room@163.com">天涯</a>
	 * Jun 19, 2013 12:26:40 PM
	 */
    public static String md5Encode(String str) throws NoSuchAlgorithmException {
		// MessageDigest 类为应用程序提供信息摘要算法的功能，如 MD5 或 SHA 算法。
		MessageDigest md = MessageDigest.getInstance("MD5");

		// 添加要进行计算摘要的信息,使用 text 的 byte 数组更新摘要。
		md.update(str.getBytes());
		return new BigInteger(1, md.digest()).toString(16);
    }
  
    /**
	 * 
	 * 将指定字符串进行base64编码
	 * 
	 * @param {String} str 需要进行base64编码的字符串
	 * @return {String} base64编码后的字符串
	 *
	 * @auther <a href="mailto:g2room@163.com">天涯</a>
	 * Jun 19, 2013 12:01:22 PM
	 */
	public static String base64Encode(String str) {
		String sr = null;
		if (null != str) {
			sr = (new BASE64Encoder()).encode(str.getBytes());
		}
		return sr;
	}
    
	/**
	 * 对密码进行加密
	 * @param password
	 * @param salt
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
    public static String getPassword(String password, String salt) throws NoSuchAlgorithmException {
    	// 对密码和salt值各自进行base64编码后拼接，然后对拼接后的字符进行md5
    	return md5Encode(base64Encode(StringUtils.isEmpty(password) ? "" : password) 
    			+ base64Encode(StringUtils.isEmpty(salt) ? "" : salt));
    }
    
    public static void main(String[] args) {
    	try {
			System.out.println(getPassword("123456", "wxzv1k"));
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
}
